%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Calcul de l'erreur locale sur une quantité d'intérêt donnée
%
% Il recalcule la solution puis il calcule la solution du problème adjoint.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%




function [ erreurLocale ,carteRemaillage ] = Erreur_locale( donnees, quantiteInteret, methodeCalculErreur )


% Résolution d'erreur du problème direct

[resolutionDirecte,donneesAdaptees]=Solveur(donnees,donnees.chargement,'direct');
donneesAdaptees.res.Uh=resolutionDirecte;
%      plot(donnees.res.Uh);
%      pause;


[erreurDirect,carteErreurDirect] = Erreur(donneesAdaptees,methodeCalculErreur);

disp(['L''erreur du problème direct vaut ',num2str(erreurDirect),' .']);







% Résolution du problème adjoint

    donneesAdjoint=donnees;

if strcmp(quantiteInteret,'fleche')==1
    
    donneesAdjoint.chargement='ponctuel';
    
    [UhAdjoint,donneesAdjoint]=Solveur(donneesAdjoint,'ponctuel','adjoint');
    donneesAdjoint.res.Uh=UhAdjoint;
    donneesAdjoint.forceLineiqueA = 0;
    donneesAdjoint.forceLineiqueB = 0;
    donneesAdjoint.forceLineiqueC = 0;
    
    
    
elseif strcmp(quantiteInteret,'moyenneMoment')==1
    
    donneesAdjoint.chargement='2moments';
    
    [UhAdjoint,donneesAdjoint]=Solveur(donneesAdjoint,'2moments','adjoint');
    donneesAdjoint.res.Uh=UhAdjoint;
    donneesAdjoint.F = 0;
    donneesAdjoint.forceLineiqueA = 0;
    donneesAdjoint.forceLineiqueB = 0;
    donneesAdjoint.forceLineiqueC = 0;
    
elseif strcmp(quantiteInteret,'rotation')==1
    
    donneesAdjoint.chargement='moment';
    
    [UhAdjoint,donneesAdjoint]=Solveur(donneesAdjoint,'moment','adjoint');
    donneesAdjoint.res.Uh=UhAdjoint;
    donneesAdjoint.forceLineiqueA = 0;
    donneesAdjoint.forceLineiqueB = 0;
    donneesAdjoint.forceLineiqueC = 0;
    
else
    
    disp('La quantité d''intérêt choisie n''est pas parmi les choix possibles (fleche, moyenneMoment). ');

    
end

[erreurAdjoint,carteErreurAdjoint]=Erreur(donneesAdjoint,methodeCalculErreur);

erreurLocale = erreurDirect*erreurAdjoint;


% plot(carteErreurAdjoint);


disp(['L''erreur du problème direct vaut ',num2str(erreurDirect),' .']);

disp(['L''erreur du problème adjoint vaut ',num2str(erreurAdjoint),' .']);

disp(['L''erreur locale vaut ',num2str(erreurLocale),' .']);




maillage=donnees.maillage;

moment=Moment_poutre(donneesAdjoint);
% carteRemaillage= -(erreurLocale) * (maillage-maillage(size(maillage,1)));
carteRemaillage=((erreurAdjoint)/max(moment))*moment;

end

